import { PermissionAction } from '@supabase/shared-types/out/constants'
import { useParams } from 'common'
import { AlertCircle } from 'lucide-react'
import { Alert, AlertDescription, AlertTitle } from 'ui'
import { Admonition } from 'ui-patterns'
import { PageContainer } from 'ui-patterns/PageContainer'
import {
PageHeader,
PageHeaderMeta,
PageHeaderNavigationTabs,
PageHeaderSummary,
PageHeaderTitle,
} from 'ui-patterns/PageHeader'
import { PageSection, PageSectionContent } from 'ui-patterns/PageSection'
import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader'
import DatabaseBackupsNav from '@/components/interfaces/Database/Backups/DatabaseBackupsNav'
import { PITRNotice } from '@/components/interfaces/Database/Backups/PITR/PITRNotice'
import { PITRSelection } from '@/components/interfaces/Database/Backups/PITR/PITRSelection'
import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout'
import DefaultLayout from '@/components/layouts/DefaultLayout'
import AlertError from '@/components/ui/AlertError'
import { DocsButton } from '@/components/ui/DocsButton'
import NoPermission from '@/components/ui/NoPermission'
import { UpgradeToPro } from '@/components/ui/UpgradeToPro'
import { useBackupsQuery } from '@/data/database/backups-query'
import { useCheckEntitlements } from '@/hooks/misc/useCheckEntitlements'
import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
import { useIsOrioleDbInAws, useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
import { DOCS_URL, PROJECT_STATUS } from '@/lib/constants'
import type { NextPageWithLayout } from '@/types'
const DatabasePhysicalBackups: NextPageWithLayout = () => {
return (
<>
Database Backups
>
)
}
DatabasePhysicalBackups.getLayout = (page) => (
{page}
)
const PITR = () => {
const { ref: projectRef } = useParams()
const { data: project } = useSelectedProjectQuery()
const { hasAccess: hasAccessToPitr, isLoading: isLoadingEntitlements } =
useCheckEntitlements('pitr.available_variants')
const isOrioleDbInAws = useIsOrioleDbInAws()
const {
data: backups,
error,
isPending: isLoadingBackups,
isError,
isSuccess,
} = useBackupsQuery({ projectRef })
const isLoading = isLoadingBackups || isLoadingEntitlements
const isEnabled = backups?.pitr_enabled
const isActiveHealthy = project?.status === PROJECT_STATUS.ACTIVE_HEALTHY
const { can: canReadPhysicalBackups, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
PermissionAction.READ,
'physical_backups'
)
if (isPermissionsLoaded && !canReadPhysicalBackups) {
return
}
if (isOrioleDbInAws) {
return (
)
}
return (
<>
{isLoading && }
{isError && }
{isSuccess && (
<>
{!isEnabled ? (
) : !isActiveHealthy ? (
Point in Time Recovery is not available while project is offline
Your project needs to be online to restore your database with Point in Time Recovery
) : (
<>
>
)}
>
)}
>
)
}
export default DatabasePhysicalBackups